public class SparseMatrix {
    public TripleNode data[];//三元组表
    public int rows;        //行数
    public int cols;        //列数
    public int nums;        //非零元素个数
    public Integer d1[][];
    public Integer d2[][];
    
    //构造有参数的方法。int类型的maxSize
    // public SparseMatrix(int maxSize){
    //     data = new TripleNode[maxSize];//为顺序表分配maxSize个存储空间
    //     for(int i =0;i<data.length;i++){
    //         data[i] = new TripleNode();
    //     }
    //     rows =0;
    //     cols = 0;
    //     nums = 0;

    // }


    //打印出矩阵
    public void printMatrix1(){
        System.out.println("原矩阵为：");
        for(int i =0;i<d1.length;i++){
            for(int j=0;j<d1[0].length;j++){
                System.out.print(d1[i][j] +" ");
            }
            System.out.println();
        }
    }


    //打印输出稀疏矩阵
    public void printMatrix(){
        int i;
        System.out.println("稀疏矩阵的三元组存储结构:");
        System.out.println("行数："+ this.rows +",列数："+ this.cols + " ,非零元素个数："+ nums);
        System.out.println("三元表为");
        for(i =0;i<nums;i++){
            System.out.print("["+data[i].row + ","+ data[i].column + ","+data[i].value+"]");
            
        }
        System.out.println();
    }


    //初始化三元矩阵顺序表
    //从一个矩阵创建一个三元表，mat为稀疏矩阵
    public SparseMatrix(Integer mat[][]){
        d1 = mat;
        int k=0,count = 0;
        rows = d1.length;//行数
        cols = d1[0].length;//列数
        //遍历数组内非零元
        for(int i =0;i<d1.length;i++){ //统计非零元的个数
            for(int j=0;j<d1[i].length;j++){
                if(d1[i][j]!=0){
                    count++;
                }
            }
        }
        nums = count;//非零元的个数赋值给nums
        data = new TripleNode[nums];//申请三元组结点空间
        for(int i =0;i<d1.length;i++){
            for(int j=0;j<d1[i].length;j++){
                if(d1[i][j]!=0){
                    data[k] = new TripleNode(i,j,d1[i][j]);
                    k++;
                }
            }
        }
    }
    // //矩阵转置算法
    // public SparseMatrix transpose(){
    //     SparseMatrix tm = new SparseMatrix(nums);//创建矩阵对象

    //     tm.cols = rows;     //行数变为列数
    //     tm.rows = cols;     //列数变为行数
    //     tm.nums = nums;     //非零元素个数不变
    //     int q= 0;
    //     for(int col = 0;col < cols;col++){
    //         for(int p=0;p<nums;p++){
    //             if(data[p].column == col){
    //                 tm.data[q].row = data[p].column;
    //                 tm.data[q].column = data[p].row;
    //                 tm.data[q].value = data[p].value;
    //                 q++;
    //             }
    //         }
    //     }
    //     return tm;
    // }
        public void transpose(){
            int c=0;
            int b=0;
            d2= new Integer[d1[0].length][d1.length];
            for (int i = 0; i < d1.length; i++) {
                for (int j = 0; j < d1[0].length; j++) {
                    
                    d2[j][i]=d1[i][j];
                }
            }
            for (int i = 0; i < d1.length; i++) {
                c=data[i].row;
                data[i].row=data[i].column;
                data[i].column=c;
            }
            d1=d2;
            b=cols;
            cols=rows;
            rows=b;
        }


}
